//给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组，并返回该子数组的长度。 
//
// 
//
// 示例 1: 
//
// 
//输入: nums = [0,1]
//输出: 2
//说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 
//
// 示例 2: 
//
// 
//输入: nums = [0,1,0]
//输出: 2
//说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 10⁵ 
// nums[i] 不是 0 就是 1 
// 
//
// Related Topics 数组 哈希表 前缀和 👍 575 👎 0

package leetcode.editor.cn;

import java.util.HashMap;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution525 {
    public int findMaxLength(int[] nums) {
        int result = 0;
        int cur = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0, -1);
        for (int i = 0; i < nums.length; i++) {
            cur += nums[i] == 0 ? -1 : 1;
            if (map.containsKey(cur)) {
                Integer index = map.get(cur);
                result = Math.max(result, i - index);
            } else {
                map.put(cur, i);
            }
        }
        return result;
    }

    public static void main(String[] args) {
        new Solution525().findMaxLength(new int[]{0,1});
    }
}
//leetcode submit region end(Prohibit modification and deletion)
